#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "driver/ledc.h"
#include "esp_err.h"

#include "buzzer.h"

// #define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_0) | (1ULL<<GPIO_OUTPUT_IO_1))
#define GPIO_PIN_BUZZER1  23
#define GPIO_PIN_BUZZER2  22
#define GPIO_PIN_BUZZER1_SEL  (1ULL<<GPIO_PIN_BUZZER1)
#define GPIO_PIN_BUZZER2_SEL  (1ULL<<GPIO_PIN_BUZZER2)

// 初始化
void buzzer_init(void)
{
    gpio_config_t io_conf;
    // 关闭中断
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    // 设置为输出模式
    io_conf.mode = GPIO_MODE_OUTPUT;
    // GPIO SEL
    io_conf.pin_bit_mask = GPIO_PIN_BUZZER1_SEL|GPIO_PIN_BUZZER2_SEL;
    // 关闭上拉模式
    io_conf.pull_down_en = 0;
    // 关闭下拉模式
    io_conf.pull_up_en = 0;
    // 配置
    gpio_config(&io_conf);
    // 关闭输出
    buzzer_stop(BUZZER_NUM_1|BUZZER_NUM_2);
}

void buzzer_start(unsigned char num)
{
    if(num & BUZZER_NUM_1) gpio_set_level(GPIO_PIN_BUZZER1, 1);
    if(num & BUZZER_NUM_2) gpio_set_level(GPIO_PIN_BUZZER2, 1);
}

void buzzer_stop(unsigned char num)
{
    if(num & BUZZER_NUM_1) gpio_set_level(GPIO_PIN_BUZZER1, 0);
    if(num & BUZZER_NUM_2) gpio_set_level(GPIO_PIN_BUZZER2, 0);
}